/**
 * 小红书平台处理器
 * 简单的格式转换和基本校验
 */

import { createLogger, ILogger } from '../../utils/logger';
import { 
  PublishPlatform, 
  IContent, 
  IValidationResult, 
  IPublishOptions, 
  IPublishResult, 
  IPlatformHandler 
} from './interfaces';

export class XiaohongshuPlatform implements IPlatformHandler {
  public readonly platform = PublishPlatform.XIAOHONGSHU;
  private readonly logger: ILogger;

  constructor(logger?: ILogger) {
    this.logger = logger || createLogger('XiaohongshuPlatform');
  }

  /**
   * 格式化内容 - 转换为小红书支持的文本格式
   */
  async formatContent(content: IContent): Promise<IContent> {
    const formatted = { ...content };

    try {
      // 1. 转换为纯文本格式
      formatted.content = this.toPlainText(content.content);
      formatted.format = 'text';

      // 2. 处理标题长度限制
      if (formatted.title.length > 50) {
        formatted.title = formatted.title.substring(0, 47) + '...';
        this.logger.warn('Title truncated to 50 characters for Xiaohongshu');
      }

      // 3. 处理标签数量限制
      if (formatted.tags && formatted.tags.length > 10) {
        formatted.tags = formatted.tags.slice(0, 10);
        this.logger.warn('Tags limited to 10 for Xiaohongshu');
      }

      return formatted;
    } catch (error) {
      this.logger.error('Failed to format content for Xiaohongshu', error as Error);
      return content;
    }
  }

  /**
   * 验证内容
   */
  validateContent(content: IContent): IValidationResult {
    const errors: string[] = [];
    const warnings: string[] = [];

    // 基本验证
    if (!content.title || content.title.trim().length === 0) {
      errors.push('标题不能为空');
    }

    if (!content.content || content.content.trim().length === 0) {
      errors.push('内容不能为空');
    }

    // 小红书特定验证
    if (content.title.length > 50) {
      warnings.push('标题长度超过50字符，将被截断');
    }

    if (content.tags && content.tags.length > 10) {
      warnings.push('标签数量超过10个，将被截断');
    }

    const textLength = content.content.replace(/<[^>]*>/g, '').length;
    if (textLength > 2000) {
      errors.push('内容长度超过小红书限制（2,000字符）');
    }

    if (textLength < 20) {
      warnings.push('内容长度较短，建议至少20字符');
    }

    // 检查是否有图片
    if (!content.coverImage && (!content.images || content.images.length === 0)) {
      warnings.push('小红书建议添加图片以提高内容吸引力');
    }

    return {
      valid: errors.length === 0,
      errors,
      warnings
    };
  }

  /**
   * 发布内容
   */
  async publish(content: IContent, options?: IPublishOptions): Promise<IPublishResult> {
    try {
      this.logger.info('Publishing to Xiaohongshu...');

      // 格式化内容
      const formattedContent = await this.formatContent(content);

      // 验证内容
      const validation = this.validateContent(formattedContent);
      if (!validation.valid) {
        return {
          success: false,
          error: `Validation failed: ${validation.errors.join(', ')}`
        };
      }

      // TODO: 实际的发布逻辑
      // 这里应该调用小红书的API或使用自动化工具发布
      
      this.logger.info('Content published to Xiaohongshu successfully');
      
      return {
        success: true,
        url: 'https://www.xiaohongshu.com/explore/example',
        articleId: 'example-id',
        metadata: {
          platform: 'xiaohongshu',
          publishTime: new Date(),
          isDraft: options?.isDraft || false
        }
      };

    } catch (error) {
      this.logger.error('Failed to publish to Xiaohongshu', error as Error);
      return {
        success: false,
        error: error instanceof Error ? error.message : 'Unknown error'
      };
    }
  }

  /**
   * 转换为纯文本 - 移除所有HTML标签和Markdown格式
   */
  private toPlainText(content: string): string {
    return content
      // 移除HTML标签
      .replace(/<[^>]*>/g, '')
      
      // 移除Markdown格式
      .replace(/#{1,6}\s/g, '') // 标题
      .replace(/\*\*(.*?)\*\*/g, '$1') // 粗体
      .replace(/\*(.*?)\*/g, '$1') // 斜体
      .replace(/`(.*?)`/g, '$1') // 代码
      .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') // 链接
      .replace(/!\[([^\]]*)\]\([^)]+\)/g, '$1') // 图片
      .replace(/^[-*+]\s/gm, '') // 列表
      .replace(/^\d+\.\s/gm, '') // 有序列表
      .replace(/^>\s/gm, '') // 引用
      .replace(/```[\s\S]*?```/g, '') // 代码块
      .replace(/---/g, '') // 分割线
      
      // 清理多余的空行和空格
      .replace(/\n{3,}/g, '\n\n')
      .replace(/[ \t]+/g, ' ')
      .trim();
  }
}
